说明
使用mysql的explain时,ken_len表示索引使用的字节数,根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断所有的索引字段是否都被查询用到。
环境
Mysql 5.6.19-log
计算基础
1. 数据类型本身占字节长度
int(11) 4
tinyint(4) 1
timestamp 4
datetime 8
2. 索引字段的附加信息
定长类型:char\int\datetime等,需要有是否为空的标记,占用1个字节。如果字段定义为非空(not null)时,不占用字节。
变长类型:varchar等,需要是否为空的标记和长度信息,共占用2个字节。
3. 字符集
gbk编码为:1个字符2个字节
utf8编码为:1个字符3个字节
utf8mb4编码为:1个字符4个字节
示例
output:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+-----------------+-----------------+---------+------+-------+----------------------------------------------------+
| 1 | SIMPLE | tv_video | range | idx_media_audit | idx_media_audit | 167 | NULL | 18127 | Using index condition; Using where; Using filesort |
KEY `idx_media_audit` (`source_type`,`ol_status`,`op_user`,`updated_at`,`created_at`) USING BTREE
计算字节长度:
int(11) 4 [+1 not null]
tinyint(4) 1 [+1 not null]
varchar(40) 40 * 4 +2
timestamp() 4 [+1 not null]
timestamp() 4 [+1 not null]
key_len 167 = 4 + 1 + 160 + 2 = 167
结论:用索引只用到了前3个字段
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。